package com.shujia.scala

import scala.io.Source

object Demo23Case {
  def main(args: Array[String]): Unit = {
    /**
     * 2、统计学生的总分
     */

    //1、读取分数表
    val scoresList: List[String] = Source.fromFile("data/score.txt").getLines().toList


    //2、安装逗号拆分数据
    val scoLost: List[Array[String]] = scoresList.map(sco => sco.split(","))


    //3、过滤脏数据
    val filterList: List[Array[String]] = scoLost.filter(arr => arr.length == 3)

    /**
     * case 也可以匹配数组
     *
     */
    //4、取出学号和分数
    val idAndScore: List[(String, Int)] = filterList.map {
      case Array(id: String, _: String, sco: String) =>
        (id, sco.toInt)
    }


    //4、按照学号分组
    val groupByList: Map[String, List[(String, Int)]] = idAndScore.groupBy(kv => kv._1)


    /**
     * 当需要处理的集合中的数据格式是一个很复杂的元组时，使用case语法，代码的可读性会更高
     * 以函数作为参数的另一种写法
     * 没有使用的变量可以使用下划线占位
     *
     */

    val sumScoList: Map[String, Int] = groupByList.map {
      case (id: String, scores: List[(String, Int)]) =>
        //取出分数
        val scos: List[Int] = scores.map { case (_: String, sco: Int) => sco }
        val sumSco: Int = scos.sum
        (id, sumSco)
    }

    sumScoList.foreach(println)


  }

}
